#include <windows.h>
#include <iostream>
using namespace std;

int index = 0;
int tickets = 4900;
HANDLE hMutex;

DWORD WINAPI Fun1proc(LPVOID lpParameter)
{
    while(TRUE)
    {
		WaitForSingleObject(hMutex, INFINITE);
        if(tickets > 0)
		{
			Sleep(1);
            cout<<"thread1 sell ticket : "<<tickets--<<endl;
		}
        else
            break;
		ReleaseMutex(hMutex);
    }
    return 0;
}

DWORD WINAPI Fun2proc(LPVOID lpParameter)
{
    while(TRUE)
    {
		WaitForSingleObject(hMutex, INFINITE);
        if(tickets > 0)
		{
			Sleep(1);
            cout<<"thread2 sell ticket : "<<tickets--<<endl;
		}
        else
            break;
		ReleaseMutex(hMutex);
    }
    return 0;
}

int main()
{
    HANDLE hThread1;
    HANDLE hThread2;
    hThread1 = CreateThread(NULL, 0, Fun1proc, NULL, 0, NULL);
    hThread2 = CreateThread(NULL, 0, Fun2proc, NULL, 0, NULL);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    /*
    while(index++ < 1000)
        cout<<"main thread is running\n";
        */
	hMutex = CreateMutex(NULL, FALSE, NULL);
    Sleep(10000);
    return 0;
}
